/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pio.action.administrador.coordinadores;

import DBMS.DataBaseManager;
import DBMS.TableReader;
import clases.ArchivoExcel;
import clases.Coordinador;
import clases.Institucion;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.upload.FormFile;

/**
 *
 * @author tamerdark
 */
public class AgregarExcel extends DispatchAction {

    public ActionForward cargar(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ArchivoExcel uploadForm = (ArchivoExcel) form;
        String mensaje = "";
        ArrayList errores = new ArrayList();
        boolean cargaExitosa = true;
        try {
            String path = getPath(uploadForm);
            if(path.isEmpty()){
                uploadForm.setMensaje("No seleccionó ningún archivo.");
                return mapping.findForward("failure");
            }
            TableReader table = new TableReader(new File(path));
            Coordinador[] tmp = new Coordinador[table.getMaxRows()];
            System.out.println("Numero maximo de filas es: " + table.getMaxRows());
            if (table.getMaxRows() > 1) {
                System.out.println("Leyendo encabezado");
                table.setRow(1); //table.read();// LEE ENCABEZADO
            } else {
                uploadForm.setMensaje("Archivo Vacio");
                return mapping.findForward("failure");
            }
            int fila = 0;
            while (table.hasNext()) {
                System.out.println("Leyendo linea");
                String[] h = table.read();
                Coordinador c = new Coordinador();
                try {
                    boolean todoFalse = true;
                    for(int i = 0 ; i < h.length ; ++i){
                        if(!h[i].isEmpty()){ // hay algo
                            todoFalse = false;
                            break;
                        }
                    }
                    if(todoFalse){
                        System.out.println("Toda la linea esta vacia");
                        break;
                    }
                    c.setCedula(h[0]);
                    c.setApellidos(h[1]);
                    c.setNombres(h[2]);
                    Institucion i = new Institucion();
                    i.setId(Integer.valueOf(h[3]));
                    c.agregarInstitucion(i);
                    c.setCorreo(h[4]);
                    c.setTelefonoCelular(h[5]);
                    c.setTelefonoCasa(h[6]);
                } catch (ArrayIndexOutOfBoundsException a) {
                    System.out.println(a);
                }
                tmp[fila] = c;
                fila++;
            }
            System.out.println("Listo de leer, empezando a agregar en la BD");
            tmp[fila] = null;
            table.finish();
            System.out.println("table.finish() ejecutado");
            DataBaseManager dbms = DataBaseManager.getInstance();
            if(dbms == null){
                System.out.println("El dbms es nulo");
            }
            fila = 0;
            while (fila < tmp.length && tmp[fila] != null) {
                System.out.print("Ejecutar agregarCoordinador");
                if (!dbms.agregarCoordinador(tmp[fila])) {
                    System.out.println("Error agregando");
                    if (mensaje.isEmpty()) {
                        mensaje += "Error en el archivo en las lineas: ";
                    }
                    cargaExitosa = false;
                    mensaje += (fila + 2) + "\n";
                    errores.add(fila);
                }else{
                    System.out.println("Agregado con exito");
                }
                fila++;
            }
            if (cargaExitosa) {
                mensaje = "Carga finalizada con exito.";
            }
            uploadForm.setMensaje(mensaje);
            return mapping.findForward("success");
        } catch (Exception e) {
            System.out.println(e);
            e.printStackTrace();
            mensaje = "Error: Archivo no soportado o Formato de Excel invalido";
            uploadForm.setMensaje(mensaje);
            return mapping.findForward("failure");
        }
    }

    public ActionForward page(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        return mapping.findForward("page");
    }

    private String getPath(ArchivoExcel uploadForm) throws IOException {
        String path = "";
        FileOutputStream outputStream = null;
        FormFile formFile = null;
        try {
            formFile = uploadForm.getPath();
            path = getServlet().getServletContext().getRealPath("") + "/"
                    + formFile.getFileName();
            outputStream = new FileOutputStream(new File(path));
            outputStream.write(formFile.getFileData());
        } catch (Exception e) {
            System.out.println(e);
            path = "";
            // Do Nothing
        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }
        return path;
    }
}
